package com.day15.java;
//抽象类的应用：模板方法的设计模式
public class TemplateMethodTest {
    public static void main(String[] args) {
        BankTemplateMethod btm = new DrawMoney();
        btm.process();

        BankTemplateMethod btm2 = new ManageMoney();
        btm2.process();
    }
}
abstract class BankTemplateMethod{
    //具体方法
    public void takeNumber(){
        System.out.println("取号排队");
    }
    public abstract void transact();//办理具体的业务//钩子方法
    public void evaluate(){
        System.out.println("反馈评分");
    }

    //模板方法，把基本操作组合到一起，子类一般不能重写
    public final void process(){
        this.takeNumber();

        this.transact();//像个钩子，具体执行时，挂哪个子类，就执行哪个子类的实现代码

        this.evaluate();
    }
}

class DrawMoney extends BankTemplateMethod{
    public void transact(){
        System.out.println("我要取款！！！");
    }
}
class ManageMoney extends BankTemplateMethod{
    public void transact(){
        System.out.println("我要理财！我这里有2000万美元！！");
    }
}